package com.itdachang.design.structural.proxy;

import com.itdachang.design.structural.decorator.LeiTikTok;
import com.itdachang.design.structural.decorator.MainTikTok;
import com.itdachang.design.structural.decorator.MeiYanDecorator;

/**
 * 装饰器
 * 四个角色
 * 抽象构建
 * 具体构建
 * 抽象装饰
 * 具体装饰
 *
 * 抽象层是一个规范
 *
 * 核心:想要不改变原来接口的情况下扩展新功能，或者增强方法....
 *
 * 什么场景使用？
 * 无处不在
 * SpringSession 中如何进行session与redis关联 HttpRequestWrapper
 * session：数据存到了内存
 * session：数据存到了redis
 * HttpSession getAttribute()
 * Wrapper(session) {
 *     getAttribute(String param) { redis.get(param) }
 * }
 * MybatisPlus提取了QueryWrapper
 * Spring中BeanWrapper是做什么？包装了Bean bean的功能增强
 * Spring Webflux中的 WebHandlerDecorator
 * 已存在的类，每一天在某个功能使用的时候发现不够，就可以用装饰器
 * @author gcq
 * @Create 2022-02-10
 */
public class MainTest {
    public static void main(String[] args) {
        MainTikTok mainTikTok = new LeiTikTok();
//        mainTikTok.tiktok();


        MeiYanDecorator meiYanDecorator = new MeiYanDecorator(mainTikTok);
        meiYanDecorator.tiktok();
    }
}